import numpy as np

t1 = np.arange(12)
print(t1)

'''
数组的形状
'''

t2 = np.array([[1,2,3],[4,5,6]])
print(t2)
print(t2.shape) # 查看行数列数

# 查看数组的形状
t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)
print(t3.shape)

# 修改数组的形状
t4 = np.arange(12)
print(t4)
print(t4.reshape((3,4)))    # 修改为3行4列的二维数组
# print(t4.reshape((3,5))) # 会报错

t5 = np.arange(24).reshape((2,3,4))  # 修改为2块3行4列的三维数组
print(t5)
print(t5.reshape((4,6)))

t5 = t5.reshape((4,6))  # 数据发生改变
print(t5)
print(t5.reshape((24,))) # 一维
print(t5.reshape((24,1))) # 二维

# 在不知道个数的情况下，将二维数组转换成一维数组
t6 = t5.reshape((t5.shape[0]*t5.shape[1],))
t5.flatten()    # 将t5按行展开，生成一维数组

# 广播机制
print(t5+2)     # 每个值都会加2
# print(t5/0)     # 会报warning,不会影响执行

# 数形形状一样时，对应位置进行数学运算
t6 = np.arange(100,124).reshape((4,6))
print(t6)
print(t6+t5)
print(t6*t5)

# 树形不一样时的数学运算
t7 = np.arange(0,6)
print(t5-t7)    # 行计算,行元素个数相同

t8 = np.arange(4).reshape((4,1))
print(t5-t8)    # 列计算,列元素个数相同

# # 行列全部相同，报错
# t9 = np.arange(10)
# print(t5-t9)

# 广播原则
# 如果两个数组的后缘维度的轴长度相符，或其中一方的长度为1，则认为他们是广播兼容的。广播会在缺失和（或）长度为1的维度上进行。